
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <windows.h>

int position_x,position_y;
int high,width;
int bullet_x,bullet_y;
int enemy_x,enemy_y;
int score;

void HideCursor()
{
	CONSOLE_CURSOR_INFO cursor_info = {1, 0};
	SetConsoleCursorInfo (GetStdHandle (STD_OUTPUT_HANDLE), &cursor_info);
}

void gotoxy(int x,int y)
{
	HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X=x;
	pos.Y=y;
	SetConsoleCursorPosition(handle,pos);
}

void startup()
{
	score=0;
	
	high=24;
	width=40;
	
	position_x=high/2;
	position_y=width/2;
	
	bullet_y=position_y;
	bullet_x=-1;
	
	enemy_x=0;
	enemy_y=width/2;
	HideCursor(); 
}

void show()
{
	gotoxy(0,0);
	int i,j;
	
	for(i=0;i<=high;i++)
	{
		for(j=0;j<=width;j++)
		{
			if(score<10)
			{
				if((i==position_x)&&(j==position_y))
			{
				printf("*");
			}
			else if((i==bullet_x)&&(j==bullet_y))
			{
				printf("|");
			}
			else if((i==enemy_x)&&(j==enemy_y))
			{
				printf("$");
			}
			else if(i==high)
			{
				printf("-");
			}
			else if(j==width)
			{
				printf("||");
			}
			else
			{
				printf(" ");
			}
			}
			
			else if(score>=10&&score<20)//变身 
			{
					if((i==position_x)&&(j==position_y))
			{
				printf("*");
			}
			else if((i==position_x+1)&&(j==position_y))
			{
					printf("*");
			}
			else if((i==position_x+1)&&(j==position_y+1))
			{
					printf("*");
			}
			else if((i==position_x+1)&&(j==position_y-1))
			{
					printf("*");
			}
			else if((i==bullet_x)&&(j==bullet_y))
			{
				printf("|");
			}
			else if((i==enemy_x)&&(j==enemy_y))
			{
				printf("$");
			}
			else if(i==high)
			{
				printf("-");
			}
			else if(j==width)
			{
				printf("||");
			}
			else
			{
				printf(" ");
			}
			}
			
			else if(score>=20)
			{
				if((i==position_x)&&(j==position_y))
			{
				printf("*");
			}
			else if((i==position_x+1)&&(j==position_y))
			{
					printf("*");
			}
			else if((i==position_x+1)&&(j==position_y+1))
			{
					printf("*");
			}
			else if((i==position_x+1)&&(j==position_y-1))
			{
					printf("*");
			}
			else if((i==position_x-1)&&(j==position_y-1))
			{
					printf("*");
			}
			else if((i==position_x-1)&&(j==position_y+1))
			{
					printf("*");
			}
			else if((i==bullet_x)&&(j==bullet_y))
			{
				printf("|");
			}
			else if((i==enemy_x)&&(j==enemy_y))
			{
				printf("$");
			}
			else if(i==high)
			{
				printf("-");
			}
			else if(j==width)
			{
				printf("||");
			}
			else
			{
				printf(" ");
			}
			}
			
			
			
			
		}
		printf("\n");
	}
	printf("得分：%d",score);
	printf("\n");
}


void updatewithoutinput()
{
	if(position_x==high)
	{
		position_x--;
	}
	if(position_x==0)
	{
		position_x++;
	}
	if(position_y==width)
	{
		position_y--;
	}
	if(position_y==0)
	{
		position_y++;
	}
	
	if((position_x==enemy_x)&&(position_y==enemy_y))//坠机扣分 
	{
		score=score-10;
		enemy_x=0;
		enemy_y=rand()%width;
		bullet_x=-1;
	}
	if((bullet_x==enemy_x)&&(bullet_y==enemy_y))
	{
		score++;
		enemy_x=0;
		enemy_y=rand()%width;
		bullet_x=-1;
	}
	if(bullet_x>-1)
	{
		bullet_x--;
	}	
	static int speed=0;
	
	if(speed<(25-score))
	{
		speed++;
	}
	if(speed==(25-score))
		{
			enemy_x++;
			speed=0;	
		}			
	if(score>25)
			{
				enemy_x++;
				speed=0;
			}
			
	if(enemy_x>high)//没打到也扣分 
		{
			enemy_x=0;
			enemy_y=rand()%width;
			score=score-10;
		}
	
}



void updatewithinput()
{
	char input;
	if(kbhit())
	{
		input=getch();
		
		if(input=='a')
		{
			position_y--;
		}
		if(input=='d')
		{
			position_y++;
		}
		if(input=='w')
		{
			position_x--;
		}
		if(input=='s')
		{
			position_x++;
		}
		if(input==' ')
		{
			bullet_x=position_x-1;
			bullet_y=position_y;
		}
		if(input==27)
		{
			system("pause");
		}
	}
}



int main()
{
	startup();
	while(1)
	{
		show();
		updatewithoutinput();
		updatewithinput();
	}
	return 0;
}